import os, glob, sys
import pandas as pd
import geopandas as gpd
import fiona
from shapely.geometry import Polygon, mapping
import matplotlib.pyplot as plt
import folium
import rasterio
import rasterio.mask
import rasterio.plot
import numpy as np
pd.set_option('display.max_columns', None)
sys.path.insert(0, '/export/miro/ndeffense/LBRAT2104/GIT/eo-toolbox/tools/')
import folium_def
import remove_overlap
path = '/export/projects/FAO-EOStat-Senegal/'
gps_xlsx = f'{path}GPS/base_nioro.xlsx'
odk_crop_csv = f'{path}ODK/FormSenegal05.csv'
odk_non_crop_csv = f'{path}ODK/FormSenegal07.csv'
odk_shp = f'{path}ODK/polygons_ODK.shp'
roi_shp = f'{path}ROI/Senegal_DepartementNioro.shp'
lut_crop_csv = f'{path}LUT/LUT_crop.csv'
lut_non_crop_csv = f'{path}LUT/LUT_non_crop.csv'
gps_shp_output = f'{path}Output_Nico/gps_with_data_FINAL.shp'
odk_crop_shp_output = f'{path}Output_Nico/odk_crop_with_data_FINAL.shp'
odk_non_crop_shp_output = f'{path}Output_Nico/odk_non_crop_with_data_FINAL.shp'
full_shp_output = f'{path}Sen4Stat/IN_SITU/SITE_41/SEN_2021_SITE_41_ori.shp'
map_html_output = f'{path}Output_Nico/odk_gps_with_data.html'
buf_size = -10 # meter
min_area = 100 # square meter
dict_gpx_list = []
wrong_pid = 0
for gpx_file in glob.glob(f'{path}GPS/*/*.gpx'):
filename = os.path.basename(gpx_file)
pid = filename[filename.find("Piste")+5:-4].lstrip('_ ')
pid = pid.replace(' ','-')
pid = pid.replace('---','-')
pid = pid.replace('--','-')
pid = pid.split('-')
if len(pid) <= 5:
pid = ''.join(pid)
layer = fiona.open(gpx_file, layer='tracks')
crs = layer.crs
if crs['init'] == 'epsg:4326':
dict_gpx = {'id': pid,
'coordinates': layer[0]['geometry']['coordinates'][0]}
dict_gpx_list.append(dict_gpx)
else:
wrong_pid += 1
df = pd.DataFrame.from_dict(dict_gpx_list).drop_duplicates('id')
print(f'Good PID (whitout duplicates) : {len(df)}')
print(f'Wrong PID : {wrong_pid}')
df['geometry'] = df.coordinates.apply(Polygon)
df = df.drop('coordinates', axis=1)
gps_gdf = gpd.GeoDataFrame(df, crs='epsg:4326', geometry='geometry').to_crs(epsg=32628)
gps_gdf.head()
Good PID (whitout duplicates) : 335 Wrong PID : 36
| id | geometry | |
|---|---|---|
| 0 | 62201022411 | POLYGON ((429548.498 1516286.092, 429548.825 1... |
| 1 | 62201022412 | POLYGON ((429863.904 1516202.422, 429863.342 1... |
| 2 | 62201022413 | POLYGON ((429972.245 1516435.077, 429973.528 1... |
| 3 | 62201022414 | POLYGON ((429974.731 1516287.245, 429976.051 1... |
| 4 | 62201022164 | POLYGON ((429808.854 1515355.640, 429808.746 1... |
print(f'Initial polygons : {len(gps_gdf)}')
gps_gdf = remove_overlap.remove_overlap(gps_gdf)
print(f'After removing overlapping parts of polygons : {len(gps_gdf)}')
gps_gdf['geometry'] = gps_gdf.buffer(buf_size)
print(f'After adding negative buffer of {buf_size}m : {len(gps_gdf)}')
gps_gdf['area'] = gps_gdf['geometry'].area.round(2)
gps_gdf = gps_gdf.loc[gps_gdf['area'] >= min_area]
print(f'After removing polygons where area is less than {min_area} square meters : {len(gps_gdf)}')
gps_gdf['collect'] = 'GPS'
print(f'--> There are {len(gps_gdf)} polygons obtained with the GPS')
gps_gdf.head()
Initial polygons : 335 After removing overlapping parts of polygons : 335 After adding negative buffer of -10m : 335 After removing polygons where area is less than 100 square meters : 324 --> There are 324 polygons obtained with the GPS
| id | geometry | area | collect | |
|---|---|---|---|---|
| 0 | 62201022411 | POLYGON ((429457.856 1516229.002, 429465.169 1... | 5172.41 | GPS |
| 1 | 62201022412 | POLYGON ((429828.180 1516150.340, 429839.170 1... | 12114.17 | GPS |
| 2 | 62201022413 | POLYGON ((429883.899 1516457.550, 429884.205 1... | 6209.42 | GPS |
| 3 | 62201022414 | POLYGON ((429986.960 1516282.075, 429987.433 1... | 2731.43 | GPS |
| 4 | 62201022164 | POLYGON ((429722.291 1515343.246, 429740.288 1... | 1860.82 | GPS |
odk_gdf = gpd.read_file(odk_shp)
odk_gdf['geometry'] = [Polygon(mapping(x)['coordinates']) for x in odk_gdf.geometry]
odk_gdf = odk_gdf.to_crs(epsg=32628)
# Build ODK ID based on other fields
#odk_gdf['id'] = odk_gdf['id-Commune'].astype(str) + odk_gdf['id-Distric'].astype(str) + odk_gdf['id-Concess'].astype(str) + odk_gdf['id-Menage'].astype(str) + odk_gdf['id-Parcell'].astype(str)
odk_gdf['id'] = odk_gdf['meta-ins_1'].str.replace('_', '').str.replace(' ', '')
odk_gdf = odk_gdf.rename(columns={"Informat_1": "crop_code"})
odk_gdf = odk_gdf[['id','crop_code','geometry']]
odk_gdf.head()
| id | crop_code | geometry | |
|---|---|---|---|
| 0 | 6220201174341 | 1.0 | POLYGON ((393929.276 1528886.677, 393909.441 1... |
| 1 | 6220201173222 | 13.0 | POLYGON ((394090.930 1528320.745, 394039.179 1... |
| 2 | 6220201171611 | 1.0 | POLYGON ((394059.235 1529548.963, 394198.230 1... |
| 3 | 6220201171631 | 1.0 | POLYGON ((393936.493 1529548.371, 394068.694 1... |
| 4 | 6220201171661 | 1.0 | POLYGON ((393929.236 1529486.680, 394057.462 1... |
print(f'Initial polygons : {len(odk_gdf)}')
odk_gdf = odk_gdf.drop_duplicates(subset=['id'])
print(f'After removing duplicates ID : {len(odk_gdf)}')
odk_gdf = remove_overlap.remove_overlap(odk_gdf)
print(f'After removing overlapping parts of polygons : {len(odk_gdf)}')
odk_gdf['geometry'] = odk_gdf.buffer(buf_size)
print(f'After adding negative buffer of {buf_size}m : {len(odk_gdf)}')
odk_gdf['area'] = odk_gdf['geometry'].area.round(2)
odk_gdf = odk_gdf.loc[odk_gdf['area'] >= min_area]
print(f'After removing polygons where area is less than {min_area} square meters : {len(odk_gdf)}')
odk_gdf['collect'] = 'ODK_polygon'
print(f'There are {len(odk_gdf)} polygons obtained with the tablet (ODK)')
odk_gdf.head()
Initial polygons : 217 After removing duplicates ID : 217 After removing overlapping parts of polygons : 217 After adding negative buffer of -10m : 217 After removing polygons where area is less than 100 square meters : 184 There are 184 polygons obtained with the tablet (ODK)
| id | crop_code | geometry | area | collect | |
|---|---|---|---|---|---|
| 0 | 6220201174341 | 1.0 | POLYGON ((393906.457 1528878.301, 393894.130 1... | 17964.69 | ODK_polygon |
| 1 | 6220201173222 | 13.0 | POLYGON ((394074.017 1528167.765, 394105.289 1... | 764.78 | ODK_polygon |
| 2 | 6220201171611 | 1.0 | POLYGON ((394080.499 1529528.924, 394177.319 1... | 8536.25 | ODK_polygon |
| 3 | 6220201171631 | 1.0 | POLYGON ((393952.711 1529569.516, 393989.334 1... | 3189.76 | ODK_polygon |
| 4 | 6220201171661 | 1.0 | POLYGON ((393948.898 1529508.585, 393948.650 1... | 1398.08 | ODK_polygon |
odk_nc_df = pd.read_csv(odk_non_crop_csv)
odk_nc_df = odk_nc_df[['Picture-LC_Class','Picture-Other_Non_Cropland','start-geopoint-Latitude','start-geopoint-Longitude']]
odk_nc_df = odk_nc_df.rename(columns={"start-geopoint-Longitude": "longitude", "start-geopoint-Latitude": "latitude", "Picture-LC_Class": 'lc_code'})
#odk_nc_df = odk_nc_df.merge(lut_non_crop_df, left_on='Picture-LC_Class', right_on='lc_code')
odk_nc_gdf = gpd.GeoDataFrame(odk_nc_df, geometry=gpd.points_from_xy(odk_nc_df.longitude, odk_nc_df.latitude, crs="EPSG:4326")).to_crs(epsg=32628)
odk_nc_gdf = odk_nc_gdf.drop(columns=['longitude', 'latitude'])
odk_nc_gdf.head()
| lc_code | Picture-Other_Non_Cropland | geometry | |
|---|---|---|---|
| 0 | 5 | NaN | POINT (394703.679 1527943.790) |
| 1 | 5 | NaN | POINT (393917.658 1529546.910) |
| 2 | 5 | NaN | POINT (394279.803 1529607.426) |
| 3 | 99 | Parcelle de mil enherbee | POINT (431783.174 1501575.154) |
| 4 | 99 | Parcelle de mais | POINT (431782.862 1501571.992) |
print(f'Initial polygons : {len(odk_nc_gdf)}')
odk_nc_gdf['geometry'] = odk_nc_gdf.buffer(15, resolution=24)
odk_nc_gdf['collect'] = 'ODK_point'
odk_nc_gdf.head()
Initial polygons : 80
| lc_code | Picture-Other_Non_Cropland | geometry | collect | |
|---|---|---|---|---|
| 0 | 5 | NaN | POLYGON ((394748.663 1527944.772, 394748.671 1... | ODK_point |
| 1 | 5 | NaN | POLYGON ((393962.642 1529547.892, 393962.650 1... | ODK_point |
| 2 | 5 | NaN | POLYGON ((394324.787 1529608.408, 394324.795 1... | ODK_point |
| 3 | 99 | Parcelle de mil enherbee | POLYGON ((431828.157 1501576.136, 431828.165 1... | ODK_point |
| 4 | 99 | Parcelle de mais | POLYGON ((431827.846 1501572.973, 431827.854 1... | ODK_point |
gps_data_df = pd.read_excel(gps_xlsx)
gps_data_df.head()
| interview__key | interview__id | id_reg | id_dep | id_arr | nom_commune | village | id_dr | id_con | id_nomCC | id_men | id_nomCM | Q1_1_1__1 | Q1_1_1__2 | Q1_1_1a | Q1_1_1c | Q1_1_1d | Q1_1_1d_aut | Q1_1_2a | Q1_1_2c | Q1_1_2d | Q1_1_2d_aut | consentement | Q1_1_4 | Q1_1_5__Latitude | Q1_1_5__Longitude | Q1_1_5__Accuracy | Q1_1_5__Altitude | Q1_1_5__Timestamp | repondant | strate | PARCELLE__id | Q1_3a_1 | Q1_3a_2 | Q1_3a_3 | Q1_3a_4 | Q1_3a_5a | Q1_3a_5aut | Q1_3a_5c | Q1_3a_5b | Q1_3a_7 | Q1_3a_8a__1 | Q1_3a_8a__4 | Q1_3a_8a__2 | Q1_3a_8a__3 | Q1_3a_8b | Q1_3a_9 | Q1_3a_10a__1 | Q1_3a_10a__4 | Q1_3a_10a__2 | Q1_3a_10a__3 | Q1_3a_10b | Q1_3a_12 | Q1_3a_14 | Q1_3a_15 | Q1_3a_16 | Q1_3a_17 | Q1_3a_18 | Q1_4a_01 | Q1_4a_02 | Q1_4a_03 | Q1_4a_0 | Q1_4a_2 | Q1_4a_3a__1 | Q1_4a_3a__2 | Q1_4a_3a__3 | Q1_4a_3a__4 | Q1_4a_3a__5 | Q1_4a_3a__6 | Q1_4a_3a__7 | Q1_4a_3a__8 | Q1_4a_3a__9 | Q1_4a_3a__10 | Q1_4a_7__1 | Q1_4a_7__3 | Q1_4a_7__4 | Q1_4a_7__2 | Q1_4a_7__5 | Q1_4a_7__6 | Q1_4a_3b | Q1_4a_4__1 | Q1_4a_4__2 | Q1_4a_4__3 | Q1_4a_5 | Q1_4a_6 | sup_est | dose_semence | Q1_4a_8 | Q1_4a_9a | Q1_4a_9b | Q1_4a_9c | Q1_4a_10 | Q1_4a_10a | Q1_4a_10b | Q1_4a_10c | Q1_4a_11 | Q1_4a_12 | Q1_4a_13__1 | Q1_4a_13__2 | Q1_4a_13__3 | Q1_4a_14 | Q1_4a_15 | Q1_4a_16a | Q1_4a_16b | Q1_4a_16c | Q1_4a_17a | Q1_4a_17b | Q1_4a_17c | Q1_4a_18 | dateSemis | Q1_4a1_2 | Q1_4a1_3a__1 | Q1_4a1_3a__2 | Q1_4a1_3a__3 | Q1_4a1_3a__4 | Q1_4a1_3a__5 | Q1_4a1_3a__6 | Q1_4a1_3a__7 | Q1_4a1_3a__8 | Q1_4a1_3a__9 | Q1_4a1_3a__10 | Q1_4a1_7__1 | Q1_4a1_7__3 | Q1_4a1_7__4 | Q1_4a1_7__2 | Q1_4a1_7__5 | Q1_4a1_7__6 | Q1_4a1_3b | Q1_4a1_4__1 | Q1_4a1_4__2 | Q1_4a1_4__3 | Q1_4a1_5 | Q1_4a1_6 | sup_est1 | dose_semence1 | Q1_4a1_8 | Q1_4a1_9a | Q1_4a1_9b | Q1_4a1_9c | Q1_4a1_10 | Q1_4a1_10a | Q1_4a1_10b | Q1_4a1_10c | Q1_4a1_11 | Q1_4a1_12 | Q1_4a1_13__1 | Q1_4a1_13__2 | Q1_4a1_13__3 | Q1_4a1_14 | Q1_4a1_15 | Q1_4a1_16a | Q1_4a1_16b | Q1_4a1_16c | Q1_4a1_17a | Q1_4a1_17b | Q1_4a1_17c | Q1_4a1_18 | dateSemis1 | Q1_4b_1 | Q1_4b_2__1 | Q1_4b_2__2 | Q1_4b_2__3 | Q1_4b_2__4 | Q1_4b_3 | Q1_4b_4__1 | Q1_4b_4__2 | Q1_4b_4__3 | Q1_4b_5__1 | Q1_4b_5__2 | Q1_4b_5__3 | Q1_4b_5a | Q1_4b_5b | Q1_4b_5c | Q1_4b_6__1 | Q1_4b_6__2 | Q1_4b_6__3 | Q1_4b_6a | Q1_4b_6b | Q1_4b_6c | quant_npk | dose_npk | Q1_4b_7__1 | Q1_4b_7__2 | Q1_4b_7__3 | Q1_4b_7a | Q1_4b_7b | Q1_4b_7c | quant_uree | dose_uree | Q1_4b_8 | Q1_4b_8a__1 | Q1_4b_8a__2 | Q1_4b_8b | quant_npk_tot | dose_npk_epan | Q1_4b_8c | quant_uree_tot | dose_uree_epan | Q1_4b_9a | Q1_4b_9b__1 | Q1_4b_9b__2 | Q1_4b_9b__3 | Q1_4b_9b__5 | Q1_4b_9b__6 | Q1_4b_9b__7 | Q1_4b_9b__4 | Q1_4b_10 | Q1_4b_11__1 | Q1_4b_11__2 | Q1_4b_11__3 | Q1_4b_11__4 | Q1_4b_11__5 | Q1_4b_11__6 | Q1_4b_11__7 | Q1_4b_11__8 | Q1_4b_11__9 | Q1_4b_11__10 | Q1_4b_11__11 | Q1_4b_11__12 | Q1_4b_11__13 | Q1_4b_11__14 | Q1_4b_11__15 | Q1_4b_11__16 | Q1_4b_11__17 | Q1_4b_11__18 | Q1_4b_11__19 | Q1_4b_11__20 | Q1_4b_11__21 | Q1_4b_11__22 | Q1_4b_11__23 | Q1_4b_11__24 | Q1_4b_11__25 | Q1_4b_11__26 | Q1_4b_11__27 | Q1_4b_11__28 | Q1_4b_11__29 | Q1_4b_11__30 | Q1_4b_11__31 | Q1_4b_11__32 | Q1_4b_11__33 | Q1_4c_1 | Q1_4c_2 | Q1_4c_3__1 | Q1_4c_3__2 | Q1_4c_3__3 | Q1_4c_3__4 | Q1_4c_3__5 | Q1_4c_3__6 | Q1_4c_4__1 | Q1_4c_4__2 | Q1_4c_4__3 | Q1_4c_4__4 | Q1_4c_4__5 | Q1_4c_5__1 | Q1_4c_5__2 | Q1_4c_5__3 | Q1_4c_5__4 | Q1_4c_5__5 | Q1_4c_5__7 | Q1_4c_5__8 | Q1_4c_5__9 | Q1_4c_5__10 | Q1_4c_5__11 | Q1_4c_5__12 | Q1_4c_5__14 | Q1_4c_5__15 | Q1_4c_5__13 | Q1_4d_1__1 | Q1_4d_1__2 | Q1_4d_1__3 | Q1_4d_2__1 | Q1_4d_2__2 | Q1_4d_2__3 | Q1_4d_3__1 | Q1_4d_3__2 | Q1_4d_3__3 | Q1_4d_4__1 | Q1_4d_4__2 | Q1_4d_4__3 | Q1_5_0__Latitude | Q1_5_0__Longitude | Q1_5_0__Accuracy | Q1_5_0__Altitude | Q1_5_0__Timestamp | Q1_5_1 | Q1_5_2a | sup_ha | Q1_5_2b | Q1_6_2c | idTraceParcelle | rendement1 | rendement2 | rendement3 | rendement4 | rendement5 | rendement6 | rendement7 | id_com | Q1_2_1__0 | Q1_2_1__1 | Q1_2_1__2 | Q1_2_1__3 | Q1_2_1__4 | Q1_2_1__5 | Q1_2_1__6 | Q1_2_1__7 | Q1_2_1__8 | Q1_2_1__9 | Q1_2_1__10 | Q1_2_1__11 | Q1_2_1__12 | Q1_2_1__13 | Q1_2_1__14 | Q1_2_1__15 | Q1_2_1__16 | Q1_2_1__17 | Q1_2_1__18 | Q1_2_1__19 | Q1_2_1__20 | Q1_2_1__21 | Q1_2_1__22 | Q1_2_1__23 | Q1_2_1__24 | Q1_2_1__25 | Q1_2_1__26 | Q1_2_1__27 | Q1_2_1__28 | Q1_2_1__29 | Q1_2_1__30 | Q1_2_1__31 | Q1_2_1__32 | Q1_2_1__33 | Q1_2_1__34 | Q1_2_1__35 | Q1_2_1__36 | Q1_2_1__37 | Q1_2_1__38 | Q1_2_1__39 | Q1_2_1__40 | Q1_2_1__41 | Q1_2_1__42 | Q1_2_1__43 | Q1_2_1__44 | Q1_2_1__45 | Q1_2_1__46 | Q1_2_1__47 | Q1_2_1__48 | Q1_2_1__49 | Q1_2_1__50 | Q1_2_1__51 | Q1_2_1__52 | Q1_2_1__53 | Q1_2_1__54 | Q1_2_1__55 | Q1_2_1__56 | Q1_2_1__57 | Q1_2_1__58 | Q1_2_1__59 | Q1_2_10 | Q1_3_0a | Q1_3a_0a | Q1_3a_1__0 | Q1_3a_1__1 | Q1_3a_1__2 | Q1_3a_1__3 | Q1_3a_1__4 | Q1_3a_1__5 | Q1_3a_1__6 | Q1_3a_1__7 | Q1_3a_1__8 | Q1_3a_1__9 | Q1_3a_1__10 | Q1_3a_1__11 | Q1_3a_1__12 | Q1_3a_1__13 | Q1_3a_1__14 | Q1_3a_1__15 | Q1_3a_1__16 | Q1_3a_1__17 | Q1_3a_1__18 | Q1_3a_1__19 | Q1_3a_1__20 | Q1_3a_1__21 | Q1_3a_1__22 | Q1_3a_1__23 | Q1_3a_1__24 | Q1_3a_1__25 | Q1_3a_1__26 | Q1_3a_1__27 | Q1_3a_1__28 | Q1_3a_1__29 | Q1_3a_1__30 | Q1_3a_1__31 | Q1_3a_1__32 | Q1_3a_1__33 | Q1_3a_1__34 | Q1_3a_1__35 | Q1_3a_1__36 | Q1_3a_1__37 | Q1_3a_1__38 | Q1_3a_1__39 | Q1_3a_1__40 | Q1_3a_1__41 | Q1_3a_1__42 | Q1_3a_1__43 | Q1_3a_1__44 | Q1_3a_1__45 | Q1_3a_1__46 | Q1_3a_1__47 | Q1_3a_1__48 | Q1_3a_1__49 | Q1_3b_0a | Q1_3b_1__0 | Q1_3b_1__1 | Q1_3b_1__2 | Q1_3b_1__3 | Q1_3b_1__4 | Q1_3b_1__5 | Q1_3b_1__6 | Q1_3b_1__7 | Q1_3b_1__8 | Q1_3b_1__9 | Q1_3b_1__10 | Q1_3b_1__11 | Q1_3b_1__12 | Q1_3b_1__13 | Q1_3b_1__14 | Q1_3b_1__15 | Q1_3b_1__16 | Q1_3b_1__17 | Q1_3b_1__18 | Q1_3b_1__19 | Q1_3b_1__20 | Q1_3b_1__21 | Q1_3b_1__22 | Q1_3b_1__23 | Q1_3b_1__24 | Q1_3b_1__25 | Q1_3b_1__26 | Q1_3b_1__27 | Q1_3b_1__28 | Q1_3b_1__29 | Q1_3b_1__30 | Q1_3b_1__31 | Q1_3b_1__32 | Q1_3b_1__33 | Q1_3b_1__34 | Q1_3b_1__35 | Q1_3b_1__36 | Q1_3b_1__37 | Q1_3b_1__38 | Q1_3b_1__39 | Q1_3b_1__40 | Q1_3b_1__41 | Q1_3b_1__42 | Q1_3b_1__43 | Q1_3b_1__44 | Q1_3b_1__45 | Q1_3b_1__46 | Q1_3b_1__47 | Q1_3b_1__48 | Q1_3b_1__49 | Q1_3c_0a | Q1_3c_0aa__0 | Q1_3c_0aa__1 | Q1_3c_0aa__2 | Q1_3c_0aa__3 | Q1_3c_0aa__4 | Q1_3c_0aa__5 | Q1_3c_0aa__6 | Q1_3c_0aa__7 | Q1_3c_0aa__8 | Q1_3c_0aa__9 | Q1_3c_0aa__10 | Q1_3c_0aa__11 | Q1_3c_0aa__12 | Q1_3c_0aa__13 | Q1_3c_0aa__14 | Q1_3c_0aa__15 | Q1_3c_0aa__16 | Q1_3c_0aa__17 | Q1_3c_0aa__18 | Q1_3c_0aa__19 | Q1_3c_0aa__20 | Q1_3c_0aa__21 | Q1_3c_0aa__22 | Q1_3c_0aa__23 | Q1_3c_0aa__24 | Q1_3c_0aa__25 | Q1_3c_0aa__26 | Q1_3c_0aa__27 | Q1_3c_0aa__28 | Q1_3c_0aa__29 | Q1_3c_0aa__30 | Q1_3c_0aa__31 | Q1_3c_0aa__32 | Q1_3c_0aa__33 | Q1_3c_0aa__34 | Q1_3c_0aa__35 | Q1_3c_0aa__36 | Q1_3c_0aa__37 | Q1_3c_0aa__38 | Q1_3c_0aa__39 | Q1_3c_0aa__40 | Q1_3c_0aa__41 | Q1_3c_0aa__42 | Q1_3c_0aa__43 | Q1_3c_0aa__44 | Q1_3c_0aa__45 | Q1_3c_0aa__46 | Q1_3c_0aa__47 | Q1_3c_0aa__48 | Q1_3c_0aa__49 | Q1_3a_24 | Q1_3b_24 | Q1_3c_24b | Q1_6_0_0 | Q1_6_0_1 | Q1_6_3_1 | Q1_6_5_1 | Q1_6_6_1 | Q1_6_7_1 | poids_moy_ara | Q1_6_8_1 | poids_recolte_ara | Q1_6_9_1 | rend_ara_cal | Q1_6_1_0 | Q1_6_0_2 | Q1_6_1_2 | Q1_6_3_2 | Q1_6_4_2 | Q1_6_5_2 | Q1_6_6_2 | Q1_6_7_2 | poids_moy_mil | Q1_6_8_2 | poids_recolte_mil | Q1_6_9_2 | rend_mil_cal | Q1_6_2_0 | Q1_6_0_3 | Q1_6_3_3 | Q1_6_3a_3 | Q1_6_3b_3 | Q1_6_4_3 | Q1_6_5_3 | Q1_6_6_3 | Q1_6_7_3 | poids_moy_niebe | Q1_6_8_3 | poids_recolte_niebe | Q1_6_9_3 | rend_niebe_cal | Q1_6_3_0 | Q1_6_0_4 | Q1_6_1_4 | Q1_6_3_4 | Q1_6_4_4 | Q1_6_5_4 | Q1_6_6_4 | Q1_6_7_4 | poids_moy_mais | Q1_6_8_4 | poids_recolte_mais | Q1_6_9_4 | rend_mais_cal | Q1_6_4_0 | Q1_6_0_5 | Q1_6_3_5 | Q1_6_4_5 | Q1_6_5_5 | Q1_6_6_5 | Q1_6_7_5 | poids_moy_sor | Q1_6_8_5 | poids_recolte_sor | Q1_6_9_5 | rend_sor_cal | Q1_6_5_0 | Q1_6_0_6 | Q1_6_8_6 | Q1_6_9_6 | rend_fonio_cal | Q1_6_6_0 | Q1_6_0_7 | Q1_6_3_7 | Q1_6_4_7 | Q1_6_5_7 | Q1_6_6_7 | Q1_6_7_7 | poids_moy_rizirr | Q1_6_8_7 | poids_recolte_rizirr | Q1_6_9_7 | rend_rizirr_cal | Q1_6_7_0 | Q1_6_0_8 | Q1_6_1_8 | Q1_6_3_8 | Q1_6_4_8 | Q1_6_5_8 | Q1_6_6_8 | Q1_6_7_8 | poids_moy_rizpluv | Q1_6_8_8 | poids_recolte_rizpluv | Q1_6_9_8 | rend_rizpluv_cal | Q1_7_1 | Q1_7_2__9 | Q1_7_2__12 | Q1_7_2__19 | Q1_7_2__34 | Q1_7_2a | Q1_7_3 | Q1_7_5 | Q1_7_6 | Q1_7_7 | Q1_7_8 | Q1_7_9__1 | Q1_7_9__2 | Q1_7_9__3 | Q1_7_9__4 | Q1_7_9__5 | Q1_7_9__6 | Q1_8_1 | Q1_8_2 | Q1_8_2_autre | sssys_irnd | has__errors | interview__status | assignment__id | responsible | interviewers | rejections__sup | rejections__hq | entities__errors | questions__comments | interview__duration | enqueteur | _merge | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 00-19-25-28 | b8d8bce498cd45f39eee9125bc5065a3 | KAOLACK | NIORO DU RIP | PAOSKOTO | DABALY | KANTORA LY | 1 | 100 | SEYDOU GAYE | Ménage4 | SEYDOU GAYE | 1 | 0 | 2021-09-30T13:37:45 | Oui | NaN | NaN | NaN | NaN | NaN | NaN | Oui | Logement du ménage | 13.654167 | -15.725445 | 3.216 | 39.473694 | 2021-09-30T10:55:38 | Seyddou Gaye | Pluviale et Elevage | 2.0 | Mil sud du village seydou Gueye 1h | Propriété du ménage | 1.0 | Non | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | 1.0 | Mil | Non | 1.0 | Non | NaN | Oui | Arachide | Culture pure | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | 6.0 | 1.0 | 6.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | juin | Semaine 4 | 800.0 | graine | kg | 1000.0 | graine | kg | octobre | 2021-06-04T00:00:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | Oui | 0.0 | 1.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | 1.0 | 0.0 | 0.0 | NaN | 150.0 | NaN | 150.0 | 150.0 | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 | 0.0 | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Aucun labour | Sol nu/ Pas de couverture | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 1.0 | 1.0 | 0.0 | 1.0 | 0.0 | 0.0 | 13.656316 | -15.736382 | 5.360 | 46.392212 | 2021-09-30T11:29:47 | 487.0 | 14600.0 | 1.4600 | 14600.0 | 14600.0 | 6220205_1_100_4_2 | Oui | Oui | Non | Non | Non | Non | Non | DABALY | Seydou Gaye | Khady Ndiaye | Matar Gaye | Amy Gaye | Aladji Gaye | Ndeye Fatou Gaye | Amath Gaye | Khady Toure | Awa Gaye | Fady Gaye | Aly Ndiaye | Babacar Gaye | Fatou Gaye | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | 13 | NaN | NaN | arachide est du villagge seydou Gueye 1h | Mil sud du village seydou Gueye 1h | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2.0 | NaN | NaN | Oui | 1.0 | 350.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Oui | 2.0 | culture en pure | 520.0 | 980.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | Non | Oui | Non | Non | NaN | NaN | NaN | NaN | NaN | NaN | 783306405.0 | Entretien terminé | NaN | 0.772965 | 0 | RejectedBySupervisor | 46014 | Enqueteurnior4 | 1 | 1 | 0 | 0 | 1 | 00.02:42:50 | Enqueteurnior4 | both in master and using data |
| 1 | 00-19-25-28 | b8d8bce498cd45f39eee9125bc5065a3 | KAOLACK | NIORO DU RIP | PAOSKOTO | DABALY | KANTORA LY | 1 | 100 | SEYDOU GAYE | Ménage4 | SEYDOU GAYE | 1 | 0 | 2021-09-30T13:37:45 | Oui | NaN | NaN | NaN | NaN | NaN | NaN | Oui | Logement du ménage | 13.654167 | -15.725445 | 3.216 | 39.473694 | 2021-09-30T10:55:38 | Seyddou Gaye | Pluviale et Elevage | 1.0 | arachide est du villagge seydou Gueye 1h | Propriété du ménage | 1.0 | Non | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | 1.0 | Arachide | Non | 1.0 | Non | NaN | Oui | Mil | Culture pure | NaN | NaN | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | NaN | 0.0 | 0.0 | 1.0 | NaN | 75.0 | 1.0 | 75.0 | NaN | NaN | NaN | NaN | NaN | Prix unitaire | NaN | 750.0 | NaN | NaN | 1.0 | 0.0 | 0.0 | juillet | Semaine 1 | 900.0 | non-décortiqué | kg | 1100.0 | non-décortiqué | kg | octobre | 2021-07-01T00:00:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 | 0.0 | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Oui | 0.0 | 1.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | Oui | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Aucun labour | Résidus de plantes | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 1.0 | 1.0 | 0.0 | 1.0 | 1.0 | 0.0 | 13.656730 | -15.725597 | 5.360 | 46.447144 | 2021-09-30T11:10:45 | 478.0 | 10930.0 | 1.0930 | 10930.0 | 10930.0 | 6220205_1_100_4_1 | Oui | Oui | Non | Non | Non | Non | Non | DABALY | Seydou Gaye | Khady Ndiaye | Matar Gaye | Amy Gaye | Aladji Gaye | Ndeye Fatou Gaye | Amath Gaye | Khady Toure | Awa Gaye | Fady Gaye | Aly Ndiaye | Babacar Gaye | Fatou Gaye | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | 13 | NaN | NaN | arachide est du villagge seydou Gueye 1h | Mil sud du village seydou Gueye 1h | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2.0 | NaN | NaN | Oui | 1.0 | 350.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Oui | 2.0 | culture en pure | 520.0 | 980.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | Non | Oui | Non | Non | NaN | NaN | NaN | NaN | NaN | NaN | 783306405.0 | Entretien terminé | NaN | 0.772965 | 0 | RejectedBySupervisor | 46014 | Enqueteurnior4 | 1 | 1 | 0 | 0 | 1 | 00.02:42:50 | Enqueteurnior4 | both in master and using data |
| 2 | 00-36-80-27 | 9987f69cac2c4511ba7eee6a38c922a5 | KAOLACK | NIORO DU RIP | MEDINA-SABAKH | MEDINA-SABAKH | KEUR AYIB | 32 | 62 | GALLO BA | Ménage10 | GALLO BA | 1 | 0 | 2021-10-12T11:09:01 | Oui | NaN | NaN | NaN | NaN | NaN | NaN | Oui | Logement du ménage | 13.592199 | -15.619412 | 4.288 | 74.098206 | 2021-10-12T11:08:02 | Amadou Sow | Pluviale et Elevage | 2.0 | mil route de nguer amadou sow | Propriété du ménage | 1.0 | Non | NaN | NaN | NaN | NaN | Oui | 1.0 | 0.0 | 0.0 | 0.0 | 1.0 | Oui | 1.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | Arachide | Non | 1.0 | Non | NaN | Oui | Arachide | Culture pure | NaN | NaN | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | NaN | 1.0 | 0.0 | 0.0 | Oui, toutes les variétés de semences utilisées... | 30.0 | 1.0 | 30.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | juin | Semaine 4 | 8.0 | non-décortiqué | kg | 1200.0 | non-décortiqué | kg | octobre | 2021-06-04T00:00:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | Oui | 0.0 | 1.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | 1.0 | 1.0 | 0.0 | 5.0 | 150.0 | NaN | 155.0 | 155.0 | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 | 0.0 | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Oui | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Labour peu profond | Sol nu/ Pas de couverture | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 0.0 | 0.0 | 1.0 | 0.0 | 1.0 | 1.0 | 0.0 | 1.0 | 0.0 | 0.0 | 13.592163 | -15.619510 | 8.576 | 74.401306 | 2021-10-12T11:43:59 | 533.0 | 9849.0 | 0.9849 | 9849.0 | 9849.0 | 6220102_32_62_10_2 | Oui | Non | Non | Non | Non | Non | Non | MEDINA-SABAKH | Amadou Sow | Abdoulaye Sow | Boubacar Sow | Penda Diallo | Diouly Sow | Tedy Sow | Aliou Sow | Penda Diallo2 | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | 8 | NaN | NaN | Arachide lamsar Amadou Sow 1ha | mil route de nguer amadou sow | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2.0 | NaN | NaN | Oui | 1.0 | 22.0 | 10.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | Non | Oui | Non | Non | NaN | NaN | NaN | NaN | NaN | NaN | 776230878.0 | Entretien terminé | NaN | 0.781694 | 0 | RejectedBySupervisor | 48820 | Enqueteurnior2 | 1 | 1 | 0 | 0 | 0 | 00.01:28:55 | Enqueteurnior2 | both in master and using data |
| 3 | 00-36-80-27 | 9987f69cac2c4511ba7eee6a38c922a5 | KAOLACK | NIORO DU RIP | MEDINA-SABAKH | MEDINA-SABAKH | KEUR AYIB | 32 | 62 | GALLO BA | Ménage10 | GALLO BA | 1 | 0 | 2021-10-12T11:09:01 | Oui | NaN | NaN | NaN | NaN | NaN | NaN | Oui | Logement du ménage | 13.592199 | -15.619412 | 4.288 | 74.098206 | 2021-10-12T11:08:02 | Amadou Sow | Pluviale et Elevage | 1.0 | Arachide lamsar Amadou Sow 1ha | Fermage (Parcelle louée au ménage) | 1.0 | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 1.0 | Arachide | Non | 2.0 | Non | NaN | Oui | Mil | Culture pure | NaN | NaN | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | NaN | 0.0 | 1.0 | 0.0 | Oui, toutes les variétés de semences utilisées... | 150.0 | 2.0 | 75.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | juillet | Semaine 1 | 2000.0 | non-décortiqué | kg | 3000.0 | non-décortiqué | kg | octobre | 2021-07-01T00:00:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | Oui | 0.0 | 1.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | 1.0 | 0.0 | 0.0 | NaN | 400.0 | NaN | 400.0 | 200.0 | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 | 0.0 | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Oui | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Labour peu profond | Résidus de plantes | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 0.0 | 0.0 | 1.0 | 0.0 | 1.0 | 1.0 | 0.0 | 0.0 | 1.0 | 0.0 | 13.581893 | -15.630800 | 5.360 | 70.079956 | 2021-10-12T12:09:43 | 544.0 | 15642.0 | 1.5642 | 15642.0 | 15642.0 | 6220102_32_62_10_1 | Oui | Non | Non | Non | Non | Non | Non | MEDINA-SABAKH | Amadou Sow | Abdoulaye Sow | Boubacar Sow | Penda Diallo | Diouly Sow | Tedy Sow | Aliou Sow | Penda Diallo2 | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | 8 | NaN | NaN | Arachide lamsar Amadou Sow 1ha | mil route de nguer amadou sow | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 2.0 | NaN | NaN | Oui | 1.0 | 22.0 | 10.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | Non | Oui | Non | Non | NaN | NaN | NaN | NaN | NaN | NaN | 776230878.0 | Entretien terminé | NaN | 0.781694 | 0 | RejectedBySupervisor | 48820 | Enqueteurnior2 | 1 | 1 | 0 | 0 | 0 | 00.01:28:55 | Enqueteurnior2 | both in master and using data |
| 4 | 01-08-61-10 | 1f7d5b3378134d7094c729e036750948 | KAOLACK | NIORO DU RIP | PAOSKOTO | DAROU SALAM | MAKA NDIENGHERE | 7 | 34 | OUSMANE SAGO SECK | Ménage1 | MOUSTAPHA SECK | 1 | 0 | 2021-09-30T10:27:33 | Oui | NaN | NaN | NaN | NaN | NaN | NaN | Oui | Logement du ménage | 13.852023 | -15.701435 | 6.432 | 63.878418 | 2021-09-30T10:27:28 | Ousmane Sago Seck | Uniquement pluviale | 4.0 | Arachide sur la route de ndama ousmane sago se... | Propriété du ménage | 1.0 | Non | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | 1.0 | Arachide | Non | 1.0 | Non | NaN | Oui | Mais | Culture pure | NaN | NaN | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | NaN | 0.0 | 1.0 | 0.0 | Oui, toutes les variétés de semences utilisées... | 80.0 | 1.0 | 80.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | juillet | Semaine 2 | 6.5 | non-décortiqué | sac 100 kg | 9.0 | non-décortiqué | sac 100 kg | octobre | 2021-07-02T00:00:00 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 | 0.0 | NaN | NaN | NaN | NaN | NaN | NaN | 0.0 | 0.0 | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Oui | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Aucun labour | Sol nu/ Pas de couverture | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 1.0 | 1.0 | 0.0 | 1.0 | 1.0 | 0.0 | 1.0 | 1.0 | 0.0 | 1.0 | 1.0 | 0.0 | 13.846473 | -15.709579 | 8.576 | 62.753784 | 2021-09-30T11:11:37 | 661.0 | 9156.0 | 0.9156 | 9156.0 | 9156.0 | 6220206_7_34_1_4 | Oui | Non | Non | Oui | Non | Non | Non | DAROU SALAM | Ousmane Sago Seck | Yacine Sall | Awa Ndiaye | Modou Awa Seck | Fatou Ndiaye Seck | Ndeye Yacine Seck | Oumy Seck | Dame Seck | Awa Seck | Seynabou Seck | Ousmane Seck | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | 11 | NaN | NaN | Mil sur la route mabo ousmane sago seck 1ha | Mais sur la route ousmane sago seck 0,5ha | Arachide sur la route ndama ousmane sago seck... | Arachide sur la route de ndama ousmane sago se... | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | ##N/A## | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 4.0 | NaN | NaN | Oui | 3.0 | 360.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Oui | 2.0 | culture en pure | 195.0 | 214.0 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | Non | NaN | NaN | NaN | NaN | NaN | NaN | Non | Non | Non | Non | NaN | NaN | NaN | NaN | NaN | NaN | 770714031.0 | Entretien terminé | NaN | 0.480822 | 0 | RejectedBySupervisor | 36839 | Enqueteurnior5 | 1 | 1 | 0 | 0 | 0 | 00.00:47:13 | Enqueteurnior5 | both in master and using data |
print(f'Initial rows {len(gps_data_df)}')
gps_data_subset_df = gps_data_df[['idTraceParcelle','Q1_3a_14']]
gps_data_subset_df = gps_data_subset_df.rename(columns={"idTraceParcelle": "id", "Q1_3a_14": "crop_name_2021"})
gps_data_subset_df = gps_data_subset_df.dropna(subset=['id'])
gps_data_subset_df['id'] = gps_data_subset_df['id'].str.replace('_', '')
print(f'After removing rows without ID : {len(gps_data_subset_df)}')
gps_data_subset_df = gps_data_subset_df.drop_duplicates(subset=['id'])
print(f'After removing duplicates ID : {len(gps_data_subset_df)}')
gps_data_subset_df.head()
Initial rows 396 After removing rows without ID : 367 After removing duplicates ID : 367
| id | crop_name_2021 | |
|---|---|---|
| 0 | 6220205110042 | Mil |
| 1 | 6220205110041 | Arachide |
| 2 | 62201023262102 | Arachide |
| 3 | 62201023262101 | Arachide |
| 4 | 622020673414 | Arachide |
odk_data_df = pd.read_csv(odk_crop_csv)
odk_data_df['id'] = odk_data_df['meta-instanceName'].str.replace('_', '').str.replace(' ', '')
odk_data_df = odk_data_df[['id','Informations_champ-Culture','Informations_champ-Surface']]
odk_data_df['Informations_champ-Surface'] = odk_data_df['Informations_champ-Surface'].round(2)
#odk_data_df = odk_data_df.merge(lut_crop_df, left_on='Informations_champ-Culture', right_on='crop_code')
odk_data_df = odk_data_df.drop_duplicates(subset=['id'])
print(f'There are {len(odk_data_df)} rows in the ODK csv.')
odk_data_df.head()
There are 232 rows in the ODK csv.
| id | Informations_champ-Culture | Informations_champ-Surface | |
|---|---|---|---|
| 0 | 6220201174341 | 1.0 | 31297.99 |
| 1 | 6220201173222 | 13.0 | 9618.22 |
| 2 | 6220201171611 | 1.0 | 17649.58 |
| 3 | 6220201171631 | 1.0 | 10117.53 |
| 4 | 6220201171661 | 1.0 | 7216.51 |
lut_crop_df = pd.read_csv(lut_crop_csv)
lut_non_crop_df = pd.read_csv(lut_non_crop_csv)
display(lut_non_crop_df.head())
print('-------------------')
display(lut_crop_df.head())
| lc_code | lc_name | |
|---|---|---|
| 0 | 1 | Prairie |
| 1 | 2 | Jachère |
| 2 | 3 | Broussailes |
| 3 | 4 | Forêt |
| 4 | 5 | Sol nu |
-------------------
| crop_code | crop_name | |
|---|---|---|
| 0 | 1 | Arachide |
| 1 | 2 | Aubergine |
| 2 | 3 | Béréf |
| 3 | 4 | Bissap |
| 4 | 5 | Coton |
gps_crops_all_gdf = gps_gdf.merge(gps_data_subset_df, on='id', how='left')
gps_crops_all_gdf = gps_crops_all_gdf.merge(odk_data_df, on='id', how='left')
gps_crops_all_gdf = gps_crops_all_gdf.merge(lut_crop_df, left_on='crop_name_2021', right_on='crop_name')
print(f'On the {len(gps_gdf)} GPS tracks, there are {len(gps_crops_all_gdf.dropna(subset=["crop_name_2021"]))} GPS tracks link to a row in the DB (equivalent to inner join)')
gps_crops_all_gdf.head()
gps_crops_all_gdf.to_file(filename=gps_shp_output)
On the 324 GPS tracks, there are 266 GPS tracks link to a row in the DB (equivalent to inner join)
/export/miro/ndeffense/.local/lib/python3.6/site-packages/ipykernel_launcher.py:11: UserWarning: Column names longer than 10 characters will be truncated when saved to ESRI Shapefile. # This is added back by InteractiveShellApp.init_path()
odk_crops_all_gdf = odk_gdf.merge(lut_crop_df, on='crop_code')
print(f'There are {len(odk_crops_all_gdf)} polygons obtained with the tablet (ODK)')
odk_crops_all_gdf.to_file(filename=odk_crop_shp_output)
odk_crops_all_gdf.head()
There are 184 polygons obtained with the tablet (ODK)
| id | crop_code | geometry | area | collect | crop_name | |
|---|---|---|---|---|---|---|
| 0 | 6220201174341 | 1.0 | POLYGON ((393906.457 1528878.301, 393894.130 1... | 17964.69 | ODK_polygon | Arachide |
| 1 | 6220201171611 | 1.0 | POLYGON ((394080.499 1529528.924, 394177.319 1... | 8536.25 | ODK_polygon | Arachide |
| 2 | 6220201171631 | 1.0 | POLYGON ((393952.711 1529569.516, 393989.334 1... | 3189.76 | ODK_polygon | Arachide |
| 3 | 6220201171661 | 1.0 | POLYGON ((393948.898 1529508.585, 393948.650 1... | 1398.08 | ODK_polygon | Arachide |
| 4 | 622010228761 | 1.0 | POLYGON ((438676.287 1505470.942, 438785.566 1... | 10258.49 | ODK_polygon | Arachide |
odk_nc_all_gdf = odk_nc_gdf.merge(lut_non_crop_df, on='lc_code')
print(f'There are {len(odk_nc_all_gdf)} points obtained with the tablet (ODK)')
odk_nc_all_gdf.to_file(filename=odk_non_crop_shp_output)
odk_nc_all_gdf.head()
There are 80 points obtained with the tablet (ODK)
/export/miro/ndeffense/.local/lib/python3.6/site-packages/ipykernel_launcher.py:5: UserWarning: Column names longer than 10 characters will be truncated when saved to ESRI Shapefile. """
| lc_code | Picture-Other_Non_Cropland | geometry | collect | lc_name | |
|---|---|---|---|---|---|
| 0 | 5 | NaN | POLYGON ((394748.663 1527944.772, 394748.671 1... | ODK_point | Sol nu |
| 1 | 5 | NaN | POLYGON ((393962.642 1529547.892, 393962.650 1... | ODK_point | Sol nu |
| 2 | 5 | NaN | POLYGON ((394324.787 1529608.408, 394324.795 1... | ODK_point | Sol nu |
| 3 | 5 | NaN | POLYGON ((440192.470 1521520.996, 440192.478 1... | ODK_point | Sol nu |
| 4 | 5 | NaN | POLYGON ((451233.011 1521624.013, 451233.019 1... | ODK_point | Sol nu |
gdf_list = [odk_crops_all_gdf, odk_nc_all_gdf, gps_crops_all_gdf]
full_polygons_gdf = pd.concat(gdf_list, axis=0, ignore_index=True)
full_polygons_gdf['gid'] = np.arange(full_polygons_gdf.shape[0])
full_polygons_gdf = full_polygons_gdf.to_crs(epsg=32628)
full_polygons_gdf.head()
| id | geometry | area | collect | Informations_champ-Melange | Informations_champ-Culture | Informations_champ-Surface | crop_code | crop_name | Picture-LC_Class | Picture-Other_Non_Cropland | lc_code | lc_name | filename | gid | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 6220201174341 | POLYGON ((393929.276 1528886.677, 393909.441 1... | 31096.39 | ODK_polygon | 1.0 | 1.0 | 31297.99 | 1.0 | Arachide | NaN | NaN | NaN | NaN | NaN | 0 |
| 1 | 6220201173222 | POLYGON ((394090.930 1528320.745, 394142.002 1... | 9556.25 | ODK_polygon | 1.0 | 13.0 | 9618.22 | 13.0 | Pastèque | NaN | NaN | NaN | NaN | NaN | 1 |
| 2 | 6220201171611 | POLYGON ((394059.235 1529548.963, 394198.230 1... | 17535.89 | ODK_polygon | 1.0 | 1.0 | 17649.58 | 1.0 | Arachide | NaN | NaN | NaN | NaN | NaN | 2 |
| 3 | 6220201171631 | POLYGON ((393936.493 1529548.371, 393926.686 1... | 10052.36 | ODK_polygon | 1.0 | 1.0 | 10117.53 | 1.0 | Arachide | NaN | NaN | NaN | NaN | NaN | 3 |
| 4 | 6220201171661 | POLYGON ((393929.236 1529486.680, 393928.363 1... | 7170.03 | ODK_polygon | 1.0 | 1.0 | 7216.51 | 1.0 | Arachide | NaN | NaN | NaN | NaN | NaN | 4 |
folium¶#f = folium.Figure(width=1000, height=700)
m = folium.Map(location = [13.743747099563299, -15.772308355932424], zoom_start=11.5)#.add_to(f)
basemap_dict = folium_def.get_basemap()
basemap_dict['Google Satellite'].add_to(m)
# Plot ROI
#roi_gdf = gpd.read_file(roi_shp)
#sim_geo = gpd.GeoSeries(roi_gdf['geometry']).simplify(tolerance=0.001)
#geo_j = sim_geo.to_json()
#geo_j = folium.GeoJson(data=geo_j,
# style_function=lambda x: {'fillOpacity': 0, 'color': 'black'})
#geo_j.add_to(m)
# Plot GPX polygons in red
for _, r in gps_crops_all_gdf.to_crs(epsg=4326).iterrows():
sim_geo = gpd.GeoSeries(r['geometry']).simplify(tolerance=0.001)
geo_j = sim_geo.to_json()
geo_j = folium.GeoJson(data=geo_j,
style_function=lambda x: {'fillOpacity': 0, 'color': 'red'})
html = f'''<b>GPS</b><br>
ID : {r['id']}<br>
Crop type : {r['crop_code']} - {r['crop_name']}<br>
Area : {r['area']}
'''
iframe = folium.IFrame(html, width=250, height=150)
folium.Popup(iframe).add_to(geo_j)
#folium.Popup('crop type ' + str(r['Informations_champ-Culture'])).add_to(geo_j)
geo_j.add_to(m)
# Plot ODK cropland polygons
# --------------------------
for _, r in odk_crops_all_gdf.to_crs(epsg=4326).iterrows():
sim_geo = gpd.GeoSeries(r['geometry']).simplify(tolerance=0.001)
geo_j = sim_geo.to_json()
geo_j = folium.GeoJson(data=geo_j,
style_function=lambda x: {'fillOpacity': 0, 'color': 'magenta'})
html = f'''<b>ODK - Cropland</b><br>
ID : {r['id']}<br>
Crop type : {r['crop_code']} - {r['crop_name']}<br>
Area : {r['area']}
'''
iframe = folium.IFrame(html, width=250, height=150)
folium.Popup(iframe).add_to(geo_j)
geo_j.add_to(m)
# Plot ODK non-cropland points
# ----------------------------
for _, r in odk_nc_all_gdf.to_crs(epsg=4326).iterrows():
sim_geo = gpd.GeoSeries(r['geometry'])#.simplify(tolerance=0.001)
geo_j = sim_geo.to_json()
geo_j = folium.GeoJson(data=geo_j,
style_function=lambda x: {'fillOpacity': 0, 'color': 'blue'})
html = f'''<b>ODK - Non cropland</b><br>
Land Cover : {r['lc_code']} - {r['lc_name']}<br>
Comment : {r['Picture-Other_Non_Cropland']}<br>
'''
iframe = folium.IFrame(html, width=250, height=150)
folium.Popup(iframe).add_to(geo_j)
geo_j.add_to(m)
m = folium_def.add_categorical_legend(m, 'Legend',
colors = ['red','magenta','blue'],
labels = ['GPX', 'ODK - cropland','ODK - non cropland'])
m.save(map_html_output)
m